package veterinaria.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;


import veterinaria.util.ConexionDB;
import veterinaria.excepcion.DAOExcepcion;
import veterinaria.modelo.Paciente;


public class PacienteDAO extends BaseDAO {
        
        public Paciente insertar(Paciente vo) throws DAOExcepcion {
                
                String query = "insert into Paciente(idCliente, Nombre, Especie, Raza, Genero, Tiposangre, Esterilizado, Tamano, Actividad, Peso, Fechanac, Nota) values (?,?,?,?,?,?,?,?,?,?,?,?)"; 
                Connection con = null;
                PreparedStatement stmt = null;
                ResultSet rs = null;
                try {
                        con = ConexionDB.obtenerConexion();
                        stmt = con.prepareStatement(query);
                  
                        stmt.setString(1, vo.getidCliente());
            			stmt.setString(2, vo.getNombre());
            			stmt.setString(3, vo.getEspecie());
            			stmt.setString(4, vo.getRaza());
            			stmt.setString(5, vo.getGenero());
            			stmt.setString(6, vo.getTiposangre());
            			stmt.setBoolean(7, vo.getEsterilizado());
            			stmt.setString(8, vo.getTamano());
            			stmt.setString(9, vo.getActividad());
            			stmt.setString(10, vo.getPeso());
            			stmt.setString(11, vo.getFechanac());
            			stmt.setString(12, vo.getNota());
            			
                    
                        int i = stmt.executeUpdate();
                        if (i != 1) {
                                throw new SQLException("No se pudo insertar");
                        }
                } catch (SQLException e) {
                        System.err.println(e.getMessage());
                        throw new DAOExcepcion(e.getMessage());
                } finally {
                        this.cerrarResultSet(rs);
                        this.cerrarStatement(stmt);
                        this.cerrarConexion(con);
                }
                return vo;
        }
   
        
        public void eliminar(int idPaciente) throws DAOExcepcion {
        	System.out.print(idPaciente);
    		String query = "delete from Paciente WHERE idPaciente=?";
    		Connection con = null;
    		PreparedStatement stmt = null;
    		try {
    			con = ConexionDB.obtenerConexion();
    			stmt = con.prepareStatement(query);
    			stmt.setInt(1, idPaciente);
    			int i = stmt.executeUpdate();
    			if (i != 1) {
    				throw new SQLException("No se pudo eliminar");
    			}
    		} catch (SQLException e) {
    			System.err.println(e.getMessage());
    			throw new DAOExcepcion(e.getMessage());
    		} finally {
    			this.cerrarStatement(stmt);
    			this.cerrarConexion(con);
    		}
    	}      
        
    	public Paciente obtener(int idPaciente) throws DAOExcepcion {
    		Paciente vo = new Paciente();
    		Connection con = null;
    		PreparedStatement stmt = null;
    		ResultSet rs = null;
    		try {
    			String query = "select idPaciente, idCliente, nombre, especie, raza, genero, tiposangre, esterilizado, Tamano, Actividad, Peso, Fechanac, Nota from Paciente where idPaciente=?";
    			con = ConexionDB.obtenerConexion();
    			stmt = con.prepareStatement(query);
    			stmt.setInt(1, idPaciente);
    			rs = stmt.executeQuery();
    			if (rs.next()) {
    			    
    				vo.setIdPaciente(rs.getInt(1));
    				vo.setidCliente(rs.getString(2));
        			vo.setNombre(rs.getString(3));
        			vo.setEspecie(rs.getString(4));
        			vo.setRaza(rs.getString(5));
        			vo.setGenero(rs.getString(6));
        			vo.setTiposangre(rs.getString(7));
        			vo.setEsterilizado(rs.getBoolean(8));
        			vo.setTamano(rs.getString(9));
        			vo.setActividad(rs.getString(10));
        			vo.setPeso(rs.getString(11));
        			vo.setFechanac(rs.getString(12));
        			vo.setNota(rs.getString(13));
      	
    			}
    		} catch (SQLException e) {
    			System.err.println(e.getMessage());
    			throw new DAOExcepcion(e.getMessage());
    		} finally {
    			this.cerrarResultSet(rs);
    			this.cerrarStatement(stmt);
    			this.cerrarConexion(con);
    		}
    		return vo;
    	}

    	public Paciente actualizar(Paciente vo) throws DAOExcepcion {
    		String query = "update Paciente set idCliente=?,Nombre=?, Especie=?, Raza=?, Genero=?, Tiposangre=?, Esterelizado=?, Tamano=?, Actividad=?, Peso=?, Fechanac=?, Nota=? where idPaciente=?";
    		Connection con = null;
    		PreparedStatement stmt = null;
    		try {
    			con = ConexionDB.obtenerConexion();
    			stmt = con.prepareStatement(query);
    			stmt.setString(1, vo.getidCliente());
    			stmt.setString(2, vo.getNombre());
    			stmt.setString(3, vo.getEspecie());
    			stmt.setString(4, vo.getRaza());
    			stmt.setString(5, vo.getGenero());
    			stmt.setString(6, vo.getTiposangre());
    			stmt.setBoolean(7, vo.getEsterilizado());
    			stmt.setString(8, vo.getTamano());
    			stmt.setString(9, vo.getActividad());
    			stmt.setString(10, vo.getPeso());
    			stmt.setString(11, vo.getFechanac());
    			stmt.setString(12, vo.getNota());
    			stmt.setInt(13, vo.getIdPaciente());
    			
    			
    			int i = stmt.executeUpdate();
    			if (i != 1) {
    				throw new SQLException("No se pudo actualizar");
    			}
    		} catch (SQLException e) {
    			System.err.println(e.getMessage());
    			throw new DAOExcepcion(e.getMessage());
    		} finally {
    			this.cerrarStatement(stmt);
    			this.cerrarConexion(con);
    		}
    		return vo;
    	}

    	public Collection<Paciente> listar(String nombre) throws DAOExcepcion {
    		Collection<Paciente> c = new ArrayList<Paciente>();
    		Connection con = null;
    		PreparedStatement stmt = null;
    		ResultSet rs = null;
    		try {
    			con = ConexionDB.obtenerConexion();
    			String query = "select idPaciente, idCliente, nombre, especie, raza, genero, tiposangre, esterilizado, Tamano, Actividad, Peso, Fechanac, Nota from Paciente where nombre = '"+nombre+"' order by nombre";
    			stmt = con.prepareStatement(query);
    			rs = stmt.executeQuery();
    			while (rs.next()) {
    				Paciente vo = new Paciente();
    				
    				vo.setIdPaciente(rs.getInt("idPaciente"));
    				vo.setidCliente(rs.getString("idCliente"));
    				vo.setNombre(rs.getString("nombre"));
    				vo.setEspecie(rs.getString("especie"));
    				vo.setRaza(rs.getString("raza"));
    				vo.setGenero(rs.getString("genero"));
    				vo.setTiposangre(rs.getString("tiposangre"));
    				vo.setEsterilizado(rs.getBoolean("esterilizado"));
    				vo.setTamano(rs.getString("tamano"));
    				vo.setActividad(rs.getString("actividad"));
    				vo.setPeso(rs.getString("peso"));
    				vo.setFechanac(rs.getString("fechanac"));
    				vo.setNota(rs.getString("nota"));
    				
    				c.add(vo);
    			}

    		} catch (SQLException e) {
    			System.err.println(e.getMessage());
    			throw new DAOExcepcion(e.getMessage());
    		} finally {
    			this.cerrarResultSet(rs);
    			this.cerrarStatement(stmt);
    			this.cerrarConexion(con);
    		}
    		return c;
    	}


		public Collection<Paciente> buscarPorNombre(String nombre) {
			// TODO Auto-generated method stub
			return null;
		}


		public Collection<Paciente> buscarPorId(int idCliente)throws DAOExcepcion {			 
							
				String query = "select idPaciente, idCliente, nombre, especie, raza, genero, tiposangre, esterilizado, Tamano, Actividad, Peso, Fechanac, Nota from Paciente where idCliente=?";
				Collection<Paciente> lista = new ArrayList<Paciente>();
				Connection con = null;
				PreparedStatement stmt = null;
				ResultSet rs = null;
				try {
					con = ConexionDB.obtenerConexion();
					stmt = con.prepareStatement(query);
					stmt.setInt(1, idCliente);
					rs = stmt.executeQuery();
					while (rs.next()) {
						Paciente vo = new Paciente();						
						vo.setIdPaciente(rs.getInt("idPaciente"));
	    				vo.setidCliente(rs.getString("idCliente"));
	    				vo.setNombre(rs.getString("nombre"));
	    				vo.setEspecie(rs.getString("especie"));
	    				vo.setRaza(rs.getString("raza"));
	    				vo.setGenero(rs.getString("genero"));
	    				vo.setTiposangre(rs.getString("tiposangre"));
	    				vo.setEsterilizado(rs.getBoolean("esterilizado"));
	    				vo.setTamano(rs.getString("tamano"));
	    				vo.setActividad(rs.getString("actividad"));
	    				vo.setPeso(rs.getString("peso"));
	    				vo.setFechanac(rs.getString("fechanac"));
	    				vo.setNota(rs.getString("nota"));
						lista.add(vo);
					}
				} catch (SQLException e) {
					System.err.println(e.getMessage());
					throw new DAOExcepcion(e.getMessage());
				} finally {
					this.cerrarResultSet(rs);
					this.cerrarStatement(stmt);
					this.cerrarConexion(con);
				}

				return lista;
		}
}